{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "zJAHLtnyQah6"
   },
   "source": [
    "##### Copyright 2020 The Cirq Developers"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "cellView": "form",
    "id": "zuEmbgh8QaG1"
   },
   "outputs": [],
   "source": [
    "#@title Licensed under the Apache License, Version 2.0 (the \"License\");\n",
    "# you may not use this file except in compliance with the License.\n",
    "# You may obtain a copy of the License at\n",
    "#\n",
    "# https://www.apache.org/licenses/LICENSE-2.0\n",
    "#\n",
    "# Unless required by applicable law or agreed to in writing, software\n",
    "# distributed under the License is distributed on an \"AS IS\" BASIS,\n",
    "# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n",
    "# See the License for the specific language governing permissions and\n",
    "# limitations under the License."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "W31l4SmqQSrM"
   },
   "source": [
    "# Rabi oscillation experiment"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "2eDV4QFhQhlO"
   },
   "source": [
    "<table class=\"tfo-notebook-buttons\" align=\"left\">\n",
    "  <td>\n",
    "    <a target=\"_blank\" href=\"https://www.example.org/cirq/tutorials/rabi_oscillations\"><img src=\"https://www.tensorflow.org/images/tf_logo_32px.png\" />View on QuantumLib</a>\n",
    "  </td>\n",
    "  <td>\n",
    "    <a target=\"_blank\" href=\"https://colab.research.google.com/github/quantumlib/Cirq/blob/master/docs/tutorials/rabi_oscillations.ipynb\"><img src=\"https://www.tensorflow.org/images/colab_logo_32px.png\" />Run in Google Colab</a>\n",
    "  </td>\n",
    "  <td>\n",
    "    <a target=\"_blank\" href=\"https://github.com/quantumlib/Cirq/blob/master/docs/tutorials/rabi_oscillations.ipynb\"><img src=\"https://www.tensorflow.org/images/GitHub-Mark-32px.png\" />View source on GitHub</a>\n",
    "  </td>\n",
    "  <td>\n",
    "    <a href=\"https://storage.googleapis.com/tensorflow_docs/Cirq/docs/tutorials/rabi_oscillations.ipynb\"><img src=\"https://www.tensorflow.org/images/download_logo_32px.png\" />Download notebook</a>\n",
    "  </td>\n",
    "</table>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "id": "bd9529db1c0b"
   },
   "outputs": [],
   "source": [
    "try:\n",
    "    import cirq\n",
    "except ImportError:\n",
    "    print(\"installing cirq...\")\n",
    "    !pip install --quiet cirq\n",
    "    print(\"installed cirq.\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "kL2C06ln6h48"
   },
   "source": [
    "In this experiment, you are going to use Cirq to check that rotating a qubit by an increasing angle, and then measuring the qubit, produces Rabi oscillations. This requires you to do the following things:\n",
    "\n",
    "1. Prepare the $|0\\rangle$ state.\n",
    "2. Rotate by an angle $\\theta$ around the $X$ axis.\n",
    "3. Measure to see if the result is a 1 or a 0.\n",
    "4. Repeat steps 1-3 $k$ times.\n",
    "5. Report the fraction of $\\frac{\\text{Number of 1's}}{k}$\n",
    "found in step 3."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "ACqqV6tJ7xXp"
   },
   "source": [
    "## 1. Getting to know Cirq\n",
    "\n",
    "Cirq emphasizes the details of implementing quantum algorithms on near term devices.\n",
    "For example, when you work on a qubit in Cirq you don't operate on an unspecified qubit that will later be mapped onto a device by a hidden step.\n",
    "Instead, you are always operating on specific qubits at specific locations that you specify.\n",
    "\n",
    "Suppose you are working with a 54 qubit Sycamore chip.\n",
    "This device is included in Cirq by default.\n",
    "It is called `cirq.google.Sycamore`, and you can see its layout by printing it."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "id": "rKoMKEw46XY7"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "                                             (0, 5)───(0, 6)\n",
      "                                             │        │\n",
      "                                             │        │\n",
      "                                    (1, 4)───(1, 5)───(1, 6)───(1, 7)\n",
      "                                    │        │        │        │\n",
      "                                    │        │        │        │\n",
      "                           (2, 3)───(2, 4)───(2, 5)───(2, 6)───(2, 7)───(2, 8)\n",
      "                           │        │        │        │        │        │\n",
      "                           │        │        │        │        │        │\n",
      "                  (3, 2)───(3, 3)───(3, 4)───(3, 5)───(3, 6)───(3, 7)───(3, 8)───(3, 9)\n",
      "                  │        │        │        │        │        │        │        │\n",
      "                  │        │        │        │        │        │        │        │\n",
      "         (4, 1)───(4, 2)───(4, 3)───(4, 4)───(4, 5)───(4, 6)───(4, 7)───(4, 8)───(4, 9)\n",
      "         │        │        │        │        │        │        │        │\n",
      "         │        │        │        │        │        │        │        │\n",
      "(5, 0)───(5, 1)───(5, 2)───(5, 3)───(5, 4)───(5, 5)───(5, 6)───(5, 7)───(5, 8)\n",
      "         │        │        │        │        │        │        │\n",
      "         │        │        │        │        │        │        │\n",
      "         (6, 1)───(6, 2)───(6, 3)───(6, 4)───(6, 5)───(6, 6)───(6, 7)\n",
      "                  │        │        │        │        │\n",
      "                  │        │        │        │        │\n",
      "                  (7, 2)───(7, 3)───(7, 4)───(7, 5)───(7, 6)\n",
      "                           │        │        │\n",
      "                           │        │        │\n",
      "                           (8, 3)───(8, 4)───(8, 5)\n",
      "                                    │\n",
      "                                    │\n",
      "                                    (9, 4)\n"
     ]
    }
   ],
   "source": [
    "import cirq\n",
    "working_device = cirq.google.Sycamore\n",
    "print(working_device)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "FJJEbuk-98Gj"
   },
   "source": [
    "For this experiment you only need one qubit and you can just pick whichever one you like."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "id": "XoXekxuQ8bI0"
   },
   "outputs": [],
   "source": [
    "my_qubit = cirq.GridQubit(5, 6)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "8Tucm7os-uET"
   },
   "source": [
    "Once you've chosen your qubit you can build circuits that use it."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "id": "niH8sty--Hu0"
   },
   "outputs": [
    {
     "data": {
      "image/svg+xml": "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"277.62234375\" height=\"50.0\"><line x1=\"34.7588671875\" x2=\"247.62234375\" y1=\"25.0\" y2=\"25.0\" stroke=\"#1967d2\" stroke-width=\"1\" /><rect x=\"10.0\" y=\"5.0\" width=\"49.517734375\" height=\"40\" stroke=\"black\" fill=\"white\" stroke-width=\"0\" /><text x=\"34.7588671875\" y=\"25.0\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-size=\"14px\">(5, 6): </text><rect x=\"79.517734375\" y=\"5.0\" width=\"67.05328125\" height=\"40\" stroke=\"black\" fill=\"white\" stroke-width=\"1\" /><text x=\"113.044375\" y=\"25.0\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-size=\"14px\">Rx(0.5π)</text><rect x=\"166.571015625\" y=\"5.0\" width=\"61.051328125\" height=\"40\" stroke=\"black\" fill=\"white\" stroke-width=\"1\" /><text x=\"197.0966796875\" y=\"25.0\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-size=\"14px\">M('out')</text></svg>",
      "text/plain": [
       "<cirq.contrib.svg.svg.SVGCircuit at 0x7f03840118d0>"
      ]
     },
     "execution_count": 4,
     "metadata": {
      "tags": []
     },
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from cirq.contrib.svg import SVGCircuit\n",
    "\n",
    "# Create a circuit with X, Ry(pi/2) and H.\n",
    "my_circuit = cirq.Circuit(\n",
    "    # Rotate the qubit pi/2 radians around the X axis.\n",
    "    cirq.rx(3.141 / 2).on(my_qubit),\n",
    "    # Measure the qubit.\n",
    "    cirq.measure(my_qubit, key='out')\n",
    ")\n",
    "SVGCircuit(my_circuit)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "-zbI-2KUMU66"
   },
   "source": [
    "Now you can simulate sampling from your circuit using `cirq.Simulator`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "id": "IqUn4uv9_IVo"
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>out</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   out\n",
       "0    1\n",
       "1    0\n",
       "2    0\n",
       "3    1\n",
       "4    1\n",
       "5    0\n",
       "6    1\n",
       "7    1\n",
       "8    0\n",
       "9    1"
      ]
     },
     "execution_count": 5,
     "metadata": {
      "tags": []
     },
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sim = cirq.Simulator()\n",
    "samples = sim.sample(my_circuit, repetitions=10)\n",
    "samples"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "k-uAT6sHdGib"
   },
   "source": [
    "You can also get properties of the circuit, such as the density matrix of the circuit's output or the state vector just before the terminal measurement."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "id": "83OqpReyHyUK"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "State before measurement:\n",
      "measurements: (no measurements)\n",
      "output vector: 0.707|0⟩ - 0.707j|1⟩\n",
      "State after measurement:\n",
      "measurements: out=1\n",
      "output vector: -1j|1⟩\n"
     ]
    }
   ],
   "source": [
    "state_vector_before_measurement = sim.simulate(my_circuit[:-1])\n",
    "sampled_state_vector_after_measurement = sim.simulate(my_circuit)\n",
    "\n",
    "print(f'State before measurement:')\n",
    "print(state_vector_before_measurement)\n",
    "print(f'State after measurement:')\n",
    "print(sampled_state_vector_after_measurement)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "1raIf8dsWHLJ"
   },
   "source": [
    "You can also examine the outputs from a noisy environment.\n",
    "For example, an environment where 10% depolarization is applied to each qubit after each operation in the circuit:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "id": "P7VW97ugWE_h"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Noisy state after measurement:measurements: out=0\n",
      "final density matrix:\n",
      "[[0.9333334 +0.j 0.        +0.j]\n",
      " [0.        +0.j 0.06666666+0.j]]\n",
      "Noisy state before measurement:measurements: (no measurements)\n",
      "final density matrix:\n",
      "[[0.50012845+0.j         0.        +0.43333334j]\n",
      " [0.        -0.43333334j 0.49987155+0.j        ]]\n"
     ]
    }
   ],
   "source": [
    "noisy_sim = cirq.DensityMatrixSimulator(noise=cirq.depolarize(0.1))\n",
    "noisy_post_measurement_state = noisy_sim.simulate(my_circuit)\n",
    "noisy_pre_measurement_state = noisy_sim.simulate(my_circuit[:-1])\n",
    "\n",
    "print('Noisy state after measurement:' + str(noisy_post_measurement_state))\n",
    "print('Noisy state before measurement:' + str(noisy_pre_measurement_state))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "2h6yoOl4Rmwt"
   },
   "source": [
    "## 2. Parameterized Circuits and Sweeps\n",
    "\n",
    "Now that you have some of the basics end to end, you can create a parameterized circuit that rotates by an angle $\\theta$:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "id": "n6h6yuyGM58s"
   },
   "outputs": [
    {
     "data": {
      "image/svg+xml": "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"283.9729296875\" height=\"50.0\"><line x1=\"34.7588671875\" x2=\"253.97292968750003\" y1=\"25.0\" y2=\"25.0\" stroke=\"#1967d2\" stroke-width=\"1\" /><rect x=\"10.0\" y=\"5.0\" width=\"49.517734375\" height=\"40\" stroke=\"black\" fill=\"white\" stroke-width=\"0\" /><text x=\"34.7588671875\" y=\"25.0\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-size=\"14px\">(5, 6): </text><rect x=\"79.517734375\" y=\"5.0\" width=\"73.40386718750001\" height=\"40\" stroke=\"black\" fill=\"white\" stroke-width=\"1\" /><text x=\"116.21966796875\" y=\"25.0\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-size=\"14px\">Rx(theta)</text><rect x=\"172.92160156250003\" y=\"5.0\" width=\"61.051328125\" height=\"40\" stroke=\"black\" fill=\"white\" stroke-width=\"1\" /><text x=\"203.44726562500003\" y=\"25.0\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-size=\"14px\">M('out')</text></svg>",
      "text/plain": [
       "<cirq.contrib.svg.svg.SVGCircuit at 0x7f03776118d0>"
      ]
     },
     "execution_count": 8,
     "metadata": {
      "tags": []
     },
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import sympy\n",
    "theta = sympy.Symbol('theta')\n",
    "\n",
    "parameterized_circuit = cirq.Circuit(\n",
    "    cirq.rx(theta).on(my_qubit),\n",
    "    cirq.measure(my_qubit, key='out')\n",
    ")\n",
    "SVGCircuit(parameterized_circuit)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "rU3BBOp0S4sM"
   },
   "source": [
    "In the above block you saw that there is a `sympy.Symbol` that you placed in the circuit. Cirq supports symbolic computation involving circuits. What this means is that when you construct `cirq.Circuit` objects you can put placeholders in many of the classical control parameters of the circuit which you can fill with values later on.\n",
    "\n",
    "Now if you wanted to use `cirq.simulate` or `cirq.sample` with the parameterized circuit you would also need to specify a value for `theta`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "id": "SMdz-yAZSwrU"
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>theta</th>\n",
       "      <th>out</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   theta  out\n",
       "0      2    1\n",
       "1      2    0\n",
       "2      2    1\n",
       "3      2    1\n",
       "4      2    1\n",
       "5      2    0\n",
       "6      2    1\n",
       "7      2    0\n",
       "8      2    1\n",
       "9      2    0"
      ]
     },
     "execution_count": 9,
     "metadata": {
      "tags": []
     },
     "output_type": "execute_result"
    }
   ],
   "source": [
    "samples_at_theta_equals_2 = sim.sample(\n",
    "    parameterized_circuit, \n",
    "    params={theta: 2}, \n",
    "    repetitions=10)\n",
    "samples_at_theta_equals_2"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "H_H13Hc8g873"
   },
   "source": [
    "You can also specify *multiple* values of `theta`, and get samples back for each value."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "id": "0zjZxGY6hIsu"
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>theta</th>\n",
       "      <th>out</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.500</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.500</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.500</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.500</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.500</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>0.500</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>0.500</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>0.500</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>0.500</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>0.500</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>3.141</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>3.141</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3.141</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>3.141</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>3.141</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>3.141</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>3.141</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>3.141</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>3.141</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>3.141</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   theta  out\n",
       "0  0.500    0\n",
       "1  0.500    0\n",
       "2  0.500    0\n",
       "3  0.500    0\n",
       "4  0.500    0\n",
       "5  0.500    0\n",
       "6  0.500    0\n",
       "7  0.500    0\n",
       "8  0.500    0\n",
       "9  0.500    0\n",
       "0  3.141    1\n",
       "1  3.141    1\n",
       "2  3.141    1\n",
       "3  3.141    1\n",
       "4  3.141    1\n",
       "5  3.141    1\n",
       "6  3.141    1\n",
       "7  3.141    1\n",
       "8  3.141    1\n",
       "9  3.141    1"
      ]
     },
     "execution_count": 10,
     "metadata": {
      "tags": []
     },
     "output_type": "execute_result"
    }
   ],
   "source": [
    "samples_at_multiple_theta = sim.sample(\n",
    "    parameterized_circuit, \n",
    "    params=[{theta: 0.5}, {theta: 3.141}], \n",
    "    repetitions=10)\n",
    "samples_at_multiple_theta"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "juuWvOEphaaE"
   },
   "source": [
    "Cirq has shorthand notation you can use to sweep `theta` over a range of values."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "id": "8lCb3049hqXn"
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>theta</th>\n",
       "      <th>out</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.785397</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.785397</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.785397</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.785397</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.785397</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1.570795</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1.570795</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1.570795</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1.570795</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1.570795</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2.356192</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2.356192</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2.356192</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2.356192</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2.356192</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>3.141590</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>3.141590</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3.141590</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>3.141590</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>3.141590</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      theta  out\n",
       "0  0.000000    0\n",
       "1  0.000000    0\n",
       "2  0.000000    0\n",
       "3  0.000000    0\n",
       "4  0.000000    0\n",
       "0  0.785397    0\n",
       "1  0.785397    0\n",
       "2  0.785397    0\n",
       "3  0.785397    0\n",
       "4  0.785397    0\n",
       "0  1.570795    1\n",
       "1  1.570795    0\n",
       "2  1.570795    0\n",
       "3  1.570795    1\n",
       "4  1.570795    0\n",
       "0  2.356192    1\n",
       "1  2.356192    1\n",
       "2  2.356192    1\n",
       "3  2.356192    0\n",
       "4  2.356192    0\n",
       "0  3.141590    1\n",
       "1  3.141590    1\n",
       "2  3.141590    1\n",
       "3  3.141590    1\n",
       "4  3.141590    1"
      ]
     },
     "execution_count": 11,
     "metadata": {
      "tags": []
     },
     "output_type": "execute_result"
    }
   ],
   "source": [
    "samples_at_swept_theta = sim.sample(\n",
    "    parameterized_circuit, \n",
    "    params=cirq.Linspace(theta, start=0, stop=3.14159, length=5), \n",
    "    repetitions=5)\n",
    "samples_at_swept_theta"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "wqaORMoKiAIW"
   },
   "source": [
    "The result value being returned by `sim.sample` is a `pandas.DataFrame` object.\n",
    "Pandas is a common library for working with table data in python.\n",
    "You can use standard pandas methods to analyze and summarize your results."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "id": "bLzGV8nFiS9o"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x7f037753b668>"
      ]
     },
     "execution_count": 12,
     "metadata": {
      "tags": []
     },
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "tags": []
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import pandas\n",
    "\n",
    "big_results = sim.sample(\n",
    "    parameterized_circuit, \n",
    "    params=cirq.Linspace(theta, start=0, stop=3.14159, length=20), \n",
    "    repetitions=10_000)\n",
    "\n",
    "# big_results is too big to look at. Plot cross tabulated data instead.\n",
    "pandas.crosstab(big_results.theta, big_results.out).plot()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "b2TkL28AmBSQ"
   },
   "source": [
    "## 3. The built-in experiment\n",
    "\n",
    "Cirq comes with a pre-written Rabi oscillation experiment `cirq.experiments.rabi_oscillations`.\n",
    "This method takes a `cirq.Sampler`, which could be a simulator or a network connection to real hardware.\n",
    "The method takes a few more experimental parameters, and returns a result object\n",
    "that can be plotted."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "id": "ma0pVZwSThQx"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x7f03775827f0>"
      ]
     },
     "execution_count": 13,
     "metadata": {
      "tags": []
     },
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\nAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 576x576 with 1 Axes>"
      ]
     },
     "metadata": {
      "tags": []
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import datetime\n",
    "\n",
    "result = cirq.experiments.rabi_oscillations(\n",
    "    sampler=noisy_sim,\n",
    "    qubit=my_qubit,\n",
    "    num_points=50,\n",
    "    repetitions=10000)\n",
    "result.plot()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "U-oezaJAnzJ8"
   },
   "source": [
    "Notice that you can tell from the plot that you used the noisy simulator you defined earlier.\n",
    "You can also tell that the amount of depolarization is roughly 10%."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "V6uE-yFxoT-3"
   },
   "source": [
    "## 4. Exercise: Find the best qubit\n",
    "\n",
    "As you have seen, you can use Cirq to perform a Rabi oscillation experiment.\n",
    "You can either make the experiment yourself out of the basic pieces made available by Cirq, or use the prebuilt experiment method.\n",
    "\n",
    "Now you're going to put this knowledge to the test.\n",
    "\n",
    "There is some amount of depolarizing noise on each qubit.\n",
    "Your goal is to characterize every qubit from the Sycamore chip using a Rabi oscillation experiment, and find the qubit with the lowest noise according to the secret noise model."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "id": "-eISq1eqXYWx"
   },
   "outputs": [],
   "source": [
    "import hashlib\n",
    "\n",
    "class SecretNoiseModel(cirq.NoiseModel):\n",
    "    def noisy_operation(self, op):\n",
    "        # Hey! No peeking!\n",
    "        q = op.qubits[0]\n",
    "        v = hashlib.sha256(str(q).encode()).digest()[0] / 256\n",
    "        yield cirq.depolarize(v).on(q)\n",
    "        yield op\n",
    "\n",
    "secret_noise_sampler = cirq.DensityMatrixSimulator(noise=SecretNoiseModel())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "id": "Rvf87Wqrp-lu"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "qubit cirq.GridQubit(1, 5)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x7f0376fc5a20>"
      ]
     },
     "execution_count": 15,
     "metadata": {
      "tags": []
     },
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\nzz3nPmWK+8c/7n7IIe4HH9zwIwdGOw2xJi5JMrOlZnaLwmxmt5rZTWa2X4GDg22STpF0pUKt/lJ3\nv83MzjCzIyubXSlpo5ndLukqSZ9y94zDeWAUWLkydKCq1dUVHh8JT9bMKXTPPfm11Lzaf23NOU1f\nn/RP/yRt2xZ6bkuhditJs2alvyapuQ+1k1hambJq9VllT9veXbr++vAz9fRIzz4r9fZKnZ3SnXcO\nraxALLLSPVkUwvs1NesHS7q50evKWqiJo+16e907OkItcOedR/ac67Jl7jNmhH0fe2x+LbVRx7Sk\n5lxf9rRz111d4bzyhAnuRx6Z/b5Zr2+2Np/IqtWnlT1v+6SMtesTJ4bbxx4bud8P0AYaTk1c0nZ3\n/11N6P9e0rYSjieAOLznPSEmJOmcc4Z+zjWtlv3kk9KLXiTtuKP0s5/l11LTLrOqtXjxwPeYM0f6\nwAfSz11v3ix95jPS/PmhJr5q1eDnjz02nHPPOvddRG0tvq8vlCtNR0f6ufG8VoD6z2rr1nB7113p\n2zM8K8aAvLHT9zWzfSX9HzP7tpm9zsxea2bnSfqvlpUQGG02baqGeNKxqllZY3/fc480Y4a0227S\n00+nv3bt2vD65culN7whfZuuLumIIwa+x8aN0vPPZ5dp3boQ4g8/LB12WHhs4sTq88nPPFQTJ0rP\nPDPwgCLrGvXt26ud9E4+uRq2zzwTmslrTZ6c/75pTep5Y68DEcmriX+tsrxC0oslfVZheNQ9JO1d\nesmA0WrDhur9oYZ41rng++8PIf7iFw8Oq1pJ4HR0SHvtFc4BJ+e0Z84MNekrrhj8HnkWL5Z22UV6\n6KHqaGhJbXYourvDQYEkTZ0azr1v3FjsgCKxcaP0rW8NPBDZvj18NmbhHPg735m/jw9+cGBNOxml\nrplz8cAolTcV6aE5y+uzXgeMebXNyUMN8axOaVu3hhB/9tnsWqpUDZw775R23z3Uyh94QHrJS6SD\nDw7rzVz2lnTOS2rizQy3mnSMq9/f2WdLDz4YatObNxcL7aKmTg3DqK5cKV12WePtk5r2ySc3HqWO\nZnZEJG8Ws//PzN4s6aWSpiSPufsZZRUKGNWSEJ80aeghvnhx+tjfZmGfV13VeB/r1oWgOfro6mPz\n5oUaeFqwZunuDoG7fLl0333h58s6j1wvmShFSp8Fra9v4OmHkfLUU9WZ14q2NmzeHMqad3A0e3b7\n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\nWt38N41GjGrXZwBgeJL/7e7uxttOnCg980yodaf1Ym9GowP8vJ72401WO7ukW2ru3yDpb2vWb856\nXdlLdOfE3d2/+c2B54wanbsZqXM9/+N/DHzf7u7G56M6O90nTw73L744vPf8+dXnJPfnnmu+LOPo\n/BUwJtX/D590kvvOO4fvhOnTq+OxFznnPdxz4uOsn42G0rFN0tkKTepnS7pP0sTK4/Pzdlj2EmWI\n33pr+KgXLWq87Uj2Zv/Sl8LrH344e995y1VXhdf191f/Wbu7my8HgLFp06bwvTBzZvEA7+3NrlBM\nm1a8U1s7rvppk7zMzWtO/7iknyp0ZDvY3bdWHp8nafydeBiOxx8Pt5sKzBszEud6kuvDTzstNHH9\n5jfh8aRpbMcdi+1n0aJwaya94AXh/saNDNQAIJgxI3w3FPluk6S3vS18D23YMHDa4cWLw+3HPlas\nY1ryXbbDDmG9o6O9ndraOZBNVrqP1qUtNfFGTcGNnv/Zz6pHi1u35r9Xo8u1ipS10RHqJZeEx5Nm\n8qxly5bqPuubysbwUS+AJrz97enjSaQtO++c/b2x667uy5Zlv0/a9+wrX1nd9/r1Zfx0+WU46aT0\nVoUR/n7UcK4TH21Ly0N8KHP1TpwYfrHJL/pDH6o+t3Fj/vsVOdeTddDQ21s9b533+ttvD499+MOD\nDxqSsJ47t7kyARifzjijWtFopkm93utf7/6qV6W/R9b38I47uu+xR1i//PJyf85mT0eO4PdjXogX\nGXZ1fGvUvJ32/NatodnZPVxi8b3vVZ9r1Oy0cmW1iShR25M7bfjC448Pl4Mdc0z2pRy1vTZ32y1M\ncPL002EfM2dWe5WfckrYJrnkrP61WfsEMD4l32nuxbbPOj34ghdI996b/pqs7+GnnpLe8pbw/XXD\nDcXL3Eha83haGfK06PuREG+kUYAV+UVt3Vq9/+ST+dsuXy59+MPV9TlzBp7ryTpo+Otf8/dbe8nG\nhAnSXntJP/pRWP/1r6vjJU+fHh678cbqHy/XeQNI09cnfetbAx+bODFckmaW/bq0781dd5UefTT9\nuyzve3b33cN8DmeeOTLnpLPGeW9m0BupZd+PmSFuZreY2c1ZS0tKNxo0CrBmf1FFOoDMmBH+GCXp\nE58Y2FljKEd3addkT51aPbh4xzvCH25fX/hHSCR/vEccwXXeAAZbsSKM9lhr69bQMtjfP3jyo0Ta\n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\nIvX/ALR62+PbgqW+AAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 576x576 with 1 Axes>"
      ]
     },
     "metadata": {
      "tags": []
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "q = cirq.google.Sycamore.qubits[3]\n",
    "print('qubit', repr(q))\n",
    "cirq.experiments.rabi_oscillations(\n",
    "    sampler=secret_noise_sampler,\n",
    "    qubit=q\n",
    ").plot()"
   ]
  }
 ],
 "metadata": {
  "colab": {
   "collapsed_sections": [
    "V6uE-yFxoT-3"
   ],
   "name": "rabi_oscillations.ipynb",
   "toc_visible": true
  },
  "kernelspec": {
   "display_name": "Python 3",
   "name": "python3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}
